import { Request, Response } from "express";
import { escape } from "querystring";
import ReaderServer from "../server/ReaderServer";

class ReaderController {

  // 添加读者
  // 参数：readername, readertype, sex, max_num, days_num
  async addReader(req: Request, res: Response) {
    const form = req.body;
    if (Object.keys(form).length < 5) return res.error('缺少必填参数！');
    const reader = await ReaderServer.findByName(form.readername);
    if (reader) return res.error('该读者姓名已被占用！');
    await ReaderServer.addReader(form);
    res.successMsg('添加读者成功！');

  }

  // 更新读者
  // 参数：id, 其他选填
  async updateReader(req: Request, res: Response) {
    const form = req.body;
    if (!form.id) return res.error('缺少必填参数！');
    const reader = await ReaderServer.findById(form.id);
    if (!reader) return res.error('查无此读者！');
    const readers = await ReaderServer.findsByName(form.readername)
    // 循环用户数组，移除与表单用户id相同的一项
    readers.forEach((item, index) => {
      if (item.id === Number(form.id)) {
        readers.splice(index, 1)
      }
    })
    // 如果还存在其他用户，则说明，用户名被占用
    if (readers.length >= 1) return res.error('用户名已被占用！');
    // 更新读者
    await ReaderServer.updateReader(form.id, form);
    res.successMsg('更新读者成功！');
  }

  // 根据 id 删除读者
  async deleteReader(req: Request, res: Response) {
    const reader = await ReaderServer.findById(req.params.id);
    if (!reader) return res.error('查无此读者！');
    await ReaderServer.deleteReader(req.params.id);
    res.successMsg('删除读者成功！');
  }

   // 根据 id 获取读者
  async getReaderById(req: Request, res: Response) {
    const reader = await ReaderServer.findById(req.params.id);
    if (!reader) return res.error('查无此读者！');
    res.success(reader);
  }

  // 获取所有读者
  async getAllReader(req: Request, res: Response) {
    const reader = await ReaderServer.findAllReader();
    res.success(reader);
  }

  // 根据姓名获取读者
  async getReaderByName(req: Request, res: Response) {
    const reader = await ReaderServer.findByName(req.body.readername);
    if (!reader) return res.error('查询失败！');
    res.success(reader);
  }

  // 根据读者姓名关键词获取（模糊匹配），参数：readername
  async getReaderByKey(req: Request, res: Response) {
    const reader = await ReaderServer.findByKeyWord(req.body.readerkey)
    if (!reader) return res.error('查询失败！');
    res.success(reader);
    
  }

  // 根据最大可借数 大于等于num 获取读者
  async getReaderByMaxNum(req: Request, res: Response) {
    const form = req.body
    const num = Number(form.max_num)
    let flag = Number.isInteger(num)
    if (!flag) return res.error('请输入数字！')
    const reader = await ReaderServer.findByMaxNum(num)
    res.success(reader)
  }

  // 根据最大可借天数 大于等于num 获取读者
  async getReaderByMaxDay(req: Request, res: Response) {
    const form = req.body
    const num = Number(form.days_num)
    let flag = Number.isInteger(num)
    if (!flag) return res.error('请输入数字！')
    const reader = await ReaderServer.findByMaxDay(num)
    res.success(reader)
  }
}

export default new ReaderController();